package com.example.campustalent.utils

import android.content.Context
import com.litesuits.orm.LiteOrm
import com.example.campustalent.utils.DbUtils
import com.litesuits.orm.db.assit.QueryBuilder
import com.litesuits.orm.db.assit.WhereBuilder
import com.litesuits.orm.db.model.ConflictAlgorithm

object DbUtils {
    var DB_NAME: String? = null
    var liteOrm: LiteOrm? = null
    fun createDb(_activity: Context?, DB_NAME: String) {
        var DB_NAME = DB_NAME
        DB_NAME = "$DB_NAME.db"
        if (liteOrm == null) {
            liteOrm = LiteOrm.newCascadeInstance(_activity, DB_NAME)
            liteOrm?.setDebugged(true)
        }
    }

    /**
     * 插入一条记录
     *
     * @param t
     */
    fun <T> insert(t: T) {
        liteOrm?.save(t)
    }

    /**
     * 插入所有记录
     *
     * @param list
     */
    fun <T> insertAll(list: List<T>) {
        liteOrm?.save(list)
    }

    /**
     * 查询所有
     *
     * @param cla
     * @return
     */
    fun <T> getQueryAll(cla: Class<T>): List<T> {
        return liteOrm!!.query(cla)
    }

    /**
     * 查询  某字段 等于 Value的值
     *
     * @param cla
     * @param field
     * @param value
     * @return
     */
    fun <T> getQueryByWhere(cla: Class<T>, field: String, value: Array<String>): List<T> {
        return liteOrm?.query<T>(QueryBuilder<T>(cla).where("$field=?", value)) as List<T>
    }
    /**
     * 查询  某字段 等于 Value的值
     *
     * @param cla
     * @param field
     * @param value
     * @return
     */
    fun <T> getQueryByWhere(cla: Class<T>, field: String, value: Array<String>, field2: String, value2: Array<String>): List<T> {
        return liteOrm?.query<T>(QueryBuilder<T>(cla).where("$field=?", value).where("$field2=?", value2)) as List<T>
    }

//    /**
//     * 查询  某字段 等于 Value的值  可以指定从1-20，就是分页
//     *
//     * @param cla
//     * @param field
//     * @param value
//     * @param start
//     * @param length
//     * @return
//     */
//    fun <T> getQueryByWhereLength(
//        cla: Class<T>,
//        field: String,
//        value: Array<String>,
//        start: Int,
//        length: Int
//    ): List<T> {
//        return liteOrm?.query<T>(
//            QueryBuilder<T>(cla).where("$field=?", value).limit(start, length) as List<T>
//        )
//    }
    /**
     * 删除所有 某字段等于 Vlaue的值
     * @param cla
     * @param field
     * @param value
     */
    //        public static <T> void deleteWhere(Class<T> cla,String field,String [] value){
    //            liteOrm.delete(cla, WhereBuilder.create().where(field + "=?", value));
    //        }
    /**
     * 删除所有
     *
     * @param cla
     */
    fun <T> deleteAll(cla: Class<T>) {
        liteOrm!!.deleteAll(cla)
    }

    /**
     * 删除所有 某字段等于 Vlaue的值
     *
     * @param cla
     * @param field
     * @param value
     */
    fun <T> deleteWhere(cla: Class<T>, field: String, value: Array<String?>?): Int {
        return liteOrm!!.delete(cla, WhereBuilder(cla).where("$field!=?", value))
    }

    /**
     * 删除一个数据
     * @param t
     * @param <T>
    </T> */
    fun <T> delete(t: T) {
        liteOrm!!.delete(t)
    }

    /**
     * 查询一个数据
     * @param t
     * @param <T>
    </T> */
    fun <T> query(t: String?, cl: Class<T>): T {
        return liteOrm!!.queryById(t, cl)
    }

    /**
     * 仅在以存在时更新
     *
     * @param t
     */
    fun <T> update(t: T) {
        liteOrm!!.update(t, ConflictAlgorithm.Replace)
    }

    fun <T> updateALL(list: List<T>) {
        liteOrm!!.update(list)
    }

    fun closeDb() {
        liteOrm!!.close()
    }

    /**
     * 删除数据库
     */
    fun deleteDatabase() {
        liteOrm!!.deleteDatabase()
    }
}